package cn.kmia.hrm.action.system;

import cn.kmia.hrm.pojo.system.Role;
import cn.kmia.hrm.pojo.system.User;
import cn.kmia.hrm.service.system.RoleInfoService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.QueryResult;
import org.nutz.dao.pager.Pager;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import org.nutz.log.Log;
import org.nutz.log.Logs;
import org.nutz.mvc.Scope;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Attr;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;

import java.util.List;

/**
 * @program: hrm
 * @description: 角色操作类
 * @author: 4K
 * @create: 2018-04-16 14:35
 **/
@IocBean
@At("/role")
public class RoleAction {

    private static final Log log = Logs.get();

    @Inject
    protected RoleInfoService roleInfoService;

    /**
     * 新增
     *
     * @param role 角色信息
     * @param user    操作者
     * @return
     */
    @At("/add")
    @Ok("json:full")
    @RequiresPermissions("role:add")
    public Object add(@Param("..") Role role, @Attr(scope = Scope.SESSION, value = "user") User user) {
        NutMap nm = new NutMap();
        role = roleInfoService.add(role, user.getUser_idcard());
        if (role == null) {
            nm.setv("success", false).setv("errorMsg", "创建角色失败，请联系管理员");
        } else {
            nm.setv("success", true);
        }
        return nm;
    }

    /**
     * 更新
     *
     * @param role 角色信息
     * @param user
     * @return
     */
    @At("/update")
    @Ok("json:full")
    @RequiresPermissions("role:update")
    public Object update(@Param("..") Role role, @Attr(scope = Scope.SESSION, value = "user") User user) {
        NutMap re = new NutMap();
        try {
            if (roleInfoService.update(role, user.getUser_idcard())) {
                re.setv("success", true);
            } else {
                re.setv("success", false);
            }
        } catch (Exception e) {
            re.setv("success", false);
            log.error("更新异常", e);
        }
        return re;
    }

    /**
     * 删除
     *
     * @param ids int[]
     * @return
     */
    @At("/del")
    @Ok("json:full")
    @RequiresPermissions("role:del")
    public Object del(@Param("ids") int[] ids) {
        NutMap re = new NutMap();
        try {
            if(ids != null){
                re = roleInfoService.del(ids);
                re.setv("success", true);
            }else {
                re.setv("success", false);
            }
        } catch (Exception e) {
            re.setv("success", false);
            log.error("删除异常", e);
        }
        return re;
    }

    /**
     * 分页显示
     *
     * @param pager 分页
     * @return
     */
    @At
    @Ok("json:full")
    @RequiresPermissions("role:queryByPage")
    public Object queryByPage(@Param("..") Pager pager, @Param("role_name") String role_name) throws Exception {
        NutMap nm = new NutMap();
        QueryResult qr = roleInfoService.queryByPage(role_name, pager);
        nm.setv("rows", qr.getList());
        nm.setv("total", qr.getPager().getRecordCount());
        return nm;
    }

    /**
     * 查询角色名称是否存在
     *
     * @param role_name
     * @return false 存在 true 不存在
     */
    @At("/find")
    @Ok("json:full")
    public Object find(@Param("role_name") String role_name) {
        NutMap re = new NutMap();
        try {
            if (roleInfoService.checkRole(role_name)) {
                re.setv("valid", false);
            } else {
                re.setv("valid", true);
            }
        } catch (Exception e) {
            re.setv("exist", false);
            log.error("查询角色名称是否存在存在异常", e);
        }
        return re;
    }

    /**
     * 查询可用角色列表
     * @return
     */
    @At("/query")
    @Ok("json:full")
    public List<Role> query() {
        return roleInfoService.query();
    }
}
